package top.lshaci.learning.springboot.mqtt.gateway;

import org.springframework.integration.annotation.MessagingGateway;
import org.springframework.integration.mqtt.support.MqttHeaders;
import org.springframework.messaging.handler.annotation.Header;

/**
 * MqttGateway
 *
 * @author liangxu
 */
@MessagingGateway(defaultRequestChannel = "mqttOutboundChannel")
public interface MqttGateway {

    /**
     * 发送消息
     *
     * @param topic   主题
     * @param content 消息内容
     */
    void send(@Header(MqttHeaders.TOPIC) String topic, String content);

    /**
     * 发送消息
     *
     * @param topic   主题
     * @param qos     对消息处理的几种机制
     *                <pre>
     *                  0 表示的是订阅者没收到消息不会再次发送，消息会丢失<br>
     *                  1 表示的是会尝试重试，一直到接收到消息，但这种情况可能导致订阅者收到多次重复消息<br>
     *                  2 多了一次去重的动作，确保订阅者收到的消息有一次
     *                </pre>
     * @param content 消息内容
     */
    void send(@Header(MqttHeaders.TOPIC) String topic, @Header(MqttHeaders.QOS) int qos, String content);

    /**
     * 发送消息
     *
     * @param topic   主题
     * @param qos     对消息处理的几种机制
     *                <pre>
     *                  0 表示的是订阅者没收到消息不会再次发送，消息会丢失<br>
     *                  1 表示的是会尝试重试，一直到接收到消息，但这种情况可能导致订阅者收到多次重复消息<br>
     *                  2 多了一次去重的动作，确保订阅者收到的消息有一次
     *                </pre>
     * @param content 消息内容
     */
    void send(@Header(MqttHeaders.TOPIC) String topic, @Header(MqttHeaders.QOS) int qos, byte[] content);
}
